第5回 pythonライブラリの利用
Pythonは基本的な演算以外、多くの計算などはライブラリに依存している。 ここではこの講義で主に用いるライブラリを以下に記載する。
例えばネイピア数eを用いて、 e^{2}
を計算するためには、e \approx 2.71828182846を使って、
7.38905609893584
と計算する必要があります。
Numpyを利用してみよう。 利用したいライブラリは、
import <パッケージ名>でインポートする。
<パッケージ名>.<関数名>の形でライブラリ内の関数を利用できる。exp(x)です。ライブラリ(あるいはパッケージやモジュール)をインポートする際には、別名をつけることができます。
省略名をつけると、パッケージの利用がしやすくなります。
import <パッケージ名> as <別名>としてつけます。7.38905609893065
で利用。
np.exp(x)
np.log(x)
Numpyをインポートすれば、ndarray形式を扱える。
Pythonリストで、リストのリストを作ることができる。
[[1, 2], [3, 4]]
これをndarrayに変換することができる。
array([[1, 2],
[3, 4]])
これを、行列として扱うことができる。
さらに、行列のうちi行j列目の要素を、
<ndarray行列>[i][j]<ndarray行列>[i,j]で取得できる。(カウントは0からであることに注意!)
2
4
[[1, 2], [3, 4, 5]]
[[1, 2], ['佐藤', '鈴木']]
array([['1', '2'],
['佐藤', '4']], dtype='<U21')
0からnより小さい整数までのリストを作成する。array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
mからnより小さい整数までのリストを作成する。array([3, 4, 5])
mからnより小さい数まで、s刻みのリストを作成する。array([3. , 3.5, 4. , 4.5, 5. , 5.5])
a、最大値をbとして、等間隔になるようにnだけの点を取るリストを作成する。array([0. , 0.5, 1. , 1.5, 2. ])
reshapeで、データの行列数を変える。1D-array
[1. 1. 1. 1. 1. 1.]
2D-array
[[1. 1.]
[1. 1.]
[1. 1.]]
ここでは主にベクトルの演算を扱う。
行列の演算については、今後必要に応じて補足します。
array([0, 1, 2])
array([1, 2, 3])
array([-1, 0, 1])
array([0, 2, 4])
array([0. , 0.5, 1. ])
array([0, 1, 8])
(array([0, 1, 2]), array([3, 4, 5]))
array([3, 5, 7])
array([-3, -3, -3])
array([ 0, 4, 10])
array([0. , 0.25, 0.4 ])
array([ 0, 1, 32])
<ndarray>だけでなく、pythonリストにも使える。array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
45
4.5
4.5
9
0
8.25
9.166666666666666
2.8722813232690143
3.0276503540974917
Numpyはランダム変数を生成できる。
Numpyライブラリ内のrandomモジュールを用いる。
<ライブラリ名>.<モジュール名>とする。<ライブラリ名>.<モジュール名>.<関数名>とする。0.8267682353900515
array([0.66024482, 0.73612361, 0.18678813])
3.6106458948824125
array([2.90655231, 3.2390258 , 2.14588859])
15
array([16, 13, 17, 14])
choice()を使うと、くじ引きを作ることもできる。
'鈴木'
'鈴木'
array(['近藤', '鈴木'], dtype='<U2')
array(['鈴木', '近藤'], dtype='<U2')
ランダム変数は、引くたび変化してしまうため、結果が一致するかどうかを確認する時などにはむしろ不便になりがち。
seed()を指定すると、引く数が固定される。
seedのイメージ
次のコードを数回実行してください。
array([2, 6, 6])
次のコードを数回実行してください。
array([5, 8, 9])
色々なグラフ描写のためのライブラリ。
基本的には、pyplotモジュールしか使わない。
したがって、次のようにインポートする。
その後、plt.<関数名>で描写を行う。
y=x^2 をプロットしよう。
f(x)=x^2 g(x)=-2x を描写する。
x = np.arange(-3,4) # -3から3
f = x**2 # fの値を計算する。
g = -2*x # gの値を計算する。
## ここからプロット用のコード
plt.figure(figsize=(6,8)) # 図の枠の大きさを調整する。
## ラインのプロット
plt.plot(x,f,
label="f(x)") # 凡例用の名前(=f(x))をつける
plt.plot(x,g,
label="g(x)") # 凡例用の名前(=g(x))をつける
plt.xlim(-2,4) # x軸のプロット範囲を-2から4にする
plt.ylim(-1,6) # y軸のプロット範囲を-1から6にする
## ラベル
plt.xlabel("x", fontsize=20) # x軸のラベルをサイズ20で
plt.ylabel("f(x), g(x)", fontsize=14) # y軸のラベルをサイズ14で
plt.title("functions of x") # タイトル。基本は日本語が使えない。
plt.legend() # 凡例をプロットに入れる
plt.show()散布図はscatter()関数を用いる。
y = x + u
でyを作ろう。
ただし、uは正規分布に従ってランダムに生成する。
棒グラフはbar()関数を用いる。
次のようにインポート。
おそらく経済系の人は、
scipy.statsscipy.optimizeのモジュールがScipyでも圧倒的に利用頻度が高いだろう。
scipyの利用方法は、今後必要に応じて解説します(やれることが多すぎる)。たいていの場合、
第5回 pythonライブラリの利用